home *** CD-ROM | disk | FTP | other *** search
/ PC Home 138 / PC Home issue 138.iso / Software / Essentials / Netscape / nim.xpi / bin / chrome / aim.jar / content / aim / GetMemberInfo.js < prev    next >
Encoding:
Text File  |  2002-10-03  |  14.0 KB  |  485 lines

  1. var localeCallbackDefault = new Object();
  2. var localeCallbackAway = new Object();
  3. var localeCallbackProfile = new Object();
  4. var screenName;
  5. var locateManager;
  6. var gotawaymsg=0;
  7. var gotprofile=0;
  8. var profileMsg;
  9. var awayMsg;
  10. var isAway;
  11. var offlinemsg;
  12.  
  13.  
  14.  
  15. //globals for smilies....inherited from Chat code
  16.     var smileyCodes = new Array(7);
  17.     smileyCodes[0] = /:-?\)/g;
  18.   smileyCodes[1] = /:-D/g;
  19.   smileyCodes[2] = /:-?\(/g;
  20.     smileyCodes[3] = /:-\[/g;
  21.   smileyCodes[4] = /;-?\)/g;
  22.   smileyCodes[5] = /:-\\/g;
  23.     smileyCodes[6] = /:-P/g;
  24.  
  25.     var smileyImgs = new Array('<img src="chrome://editor/content/images/smile_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>',
  26.                                '<img src="chrome://editor/content/images/laughing_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>',
  27.                                '<img src="chrome://editor/content/images/frown_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>',
  28.                                '<img src="chrome://editor/content/images/embarrassed_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>',
  29.                                '<img src="chrome://editor/content/images/wink_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>',
  30.                                '<img src="chrome://editor/content/images/undecided_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>',
  31.                                '<img src="chrome://editor/content/images/tongue_n.gif" class="moz-txt-smily" height=19 width=19 align=ABSCENTER>');
  32.  
  33. /*
  34.  * Function: getMemberInfoOnWinLoad()
  35.  *
  36.  * Arguments: None
  37.  * 
  38.  * Return: None
  39.  *
  40.  * Description: This function is called when Get Member Info(GMI) window is loaded. If it has a screenname call
  41.  *  getMemberInfo to get all the values.
  42.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  43.  *              
  44. */
  45.  
  46. function getMemberInfoOnWinLoad() {
  47.   window.title= aimString("gmi.windowtitle").replace(/%ScreenName%/, "");
  48.   doSetOKCancel(getMemberInfo, onCancel);
  49.   screenName = window.arguments[0];
  50.   if (screenName && screenName != "") {
  51.     document.getElementById("screenname").setAttribute("value",screenName);
  52.     getMemberInfo();
  53.   }
  54.   else {
  55.     document.getElementById("screenname").focus();
  56.     document.getElementById("ok").setAttribute("disabled", "true");
  57.   }
  58. }
  59.  
  60. /*
  61.  * Function: snKeyPress()
  62.  *
  63.  * Arguments: event
  64.  * 
  65.  * Return: None
  66.  *
  67.  * Description: This is called on every keypress in the screenname field. The OK button is enabled if length is 
  68.  *  more than one and on enter getMemberInfo fn is called.
  69.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  70.  *              
  71. */
  72.  
  73. function snKeyPress(event) {
  74.   if (event.keyCode != 9)
  75.     clearAllValues();
  76.   screenName = document.getElementById("screenname").value;
  77.   if (screenName && screenName.length > 0)
  78.     document.getElementById("ok").setAttribute("disabled", "false");
  79.   else
  80.     document.getElementById("ok").setAttribute("disabled", "true");
  81.  
  82.   if(screenName && screenName.length > 0 && event.keyCode == 13) {
  83.     //the user has pressed Enter key.
  84.     getMemberInfo();
  85.   }
  86. }
  87.  
  88. /*
  89.  * Function: onCancel()
  90.  *
  91.  * Arguments: None
  92.  * 
  93.  * Return: None
  94.  *
  95.  * Description: Just closes the GMI window. 
  96.  *
  97.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  98.  *              
  99. */
  100. function onCancel() {
  101.   window.close();
  102. }
  103.  
  104. /*
  105.  * Function: clearAllValues()
  106.  *
  107.  * Arguments: None
  108.  * 
  109.  * Return: None
  110.  *
  111.  * Description: Clears all the fields in GMI window.
  112.  *
  113.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  114.  *              
  115. */
  116. function clearAllValues() {
  117.   document.getElementById("displayNameValue").value = "";
  118.   document.getElementById("userWarningPercent").value = "";
  119.   document.getElementById("userOnlineTime").value = "";
  120.   document.getElementById("awayidlelabel").value = "";
  121.   document.getElementById("awayidletime").value = "";
  122.   window.frames["profilefield"].location = "about:blank";
  123.   window.title= aimString("gmi.windowtitle").replace(/%ScreenName%/, "");
  124.   gotprofile = 0;
  125.   gotawaymsg = 0;
  126. }
  127.  
  128.  
  129. /*
  130.  * Function: getMemberInfo()
  131.  *
  132.  * Arguments: None
  133.  * 
  134.  * Return: None
  135.  *
  136.  * Description: This fn calls RequestUserInfoDefault in LocateManager to get default info (away, idle, online etc). and 
  137.  *   RequestUserInfoSignature to get Profile/Signature info. 
  138.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  139.  *              
  140. */
  141. function getMemberInfo() {
  142.   clearAllValues();
  143.   window.title= aimString("gmi.windowtitle").replace(/%ScreenName%/, screenName);
  144.   var aimBuddy = aimBuddyManager();
  145.   if (!aimBuddy) {
  146.     dump("Unable to create aimBuddy...\n");
  147.     return;
  148.   }
  149.   
  150.  
  151.   locateManager = aimLocateManager();
  152.   if (!locateManager) {
  153.     dump("Unable to create locateManager...\n");
  154.     return;
  155.   }
  156.   locateManager.RequestUserInfoDefault(localeCallbackDefault, screenName);
  157.   
  158.   //var disName = document.getElementById("displayNameValue");
  159.   //document.getElementById("userWarningPercent").setAttribute("value", warningPercent + "%");
  160.   var curDispName = aimFeedbagManager().GetDispName(screenName);
  161.   if (curDispName && curDispName != "")
  162.     document.getElementById("displayNameValue").setAttribute("value",curDispName);
  163.   else {
  164.     document.getElementById("displayLabel").setAttribute("hidden", true);
  165.     document.getElementById("displayNameValue").setAttribute("hidden", true);
  166.   }
  167.  
  168.   // this is to update the GMI window for every 5 minutes!
  169.   setTimeout('getMemberInfo()', 5 * 60000);
  170.  
  171. }
  172.  
  173.  
  174. /*
  175.  * Function: OnRequestUserInfoDefaultComplete()
  176.  *
  177.  * Arguments: screenname, userObject
  178.  * 
  179.  * Return: None
  180.  *
  181.  * Description: Based on the userObject, user info like Online time, Idle time, warning percent, Away are obtained.
  182.  *   If the user is Away, RequestUserInfoAwayMessage in LocateManager is called to get the Away msg.
  183.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  184.  *              
  185. */
  186.  
  187.  
  188. localeCallbackDefault.OnRequestUserInfoDefaultComplete = function (screenname, userObject) {
  189.   
  190.   locateManager.RequestUserInfoSignature(localeCallbackProfile, screenName);
  191.  
  192.  
  193.   var warningPercent = userObject.GetWarningPercent();
  194.   if (warningPercent >= 0 ) {
  195.     document.getElementById("userWarningPercent").setAttribute("value", warningPercent + "%");
  196.   }
  197.   else {
  198.     document.getElementById("userWarningPercent").setAttribute("value", "");
  199.   }
  200.  
  201.   var onlineTime = userObject.GetOnlineSinceTime();
  202.   var now = new Date().getTime()/1000;
  203.   if (onlineTime >= 0 ) {
  204.     document.getElementById("userOnlineTime").setAttribute("value", getPrettyDateDiff(now, onlineTime));
  205.   }
  206.   else {
  207.     document.getElementById("userOnlineTime").setAttribute("value", "");
  208.   }
  209.  
  210.   var isIdle = userObject.IsIdle();
  211.   var idletime;
  212.   if (isIdle) {
  213.     var idlesincetime = userObject.GetIdleSinceTime();
  214.     idletime = getPrettyDateDiff(now, idlesincetime);
  215.   }
  216.  
  217.   isAway = userObject.IsAway();
  218.   
  219.   if (isIdle) {
  220.     if (isAway) {
  221.       //user is away and idle
  222.       document.getElementById("awayidlelabel").setAttribute("value", aimString("gmi.idleandaway"));
  223.       document.getElementById("awayidletime").setAttribute("value", idletime);
  224.     } else {
  225.       // user is just idle
  226.       document.getElementById("awayidlelabel").setAttribute("value", aimString("gmi.idle"));
  227.       document.getElementById("awayidletime").setAttribute("value", idletime);
  228.     }
  229.   }
  230.   else {
  231.     if (isAway)
  232.       //user is just away.
  233.       document.getElementById("awayidlelabel").setAttribute("value", aimString("gmi.away"));
  234.   }
  235.  
  236.   if (isAway) {
  237.     locateManager.RequestUserInfoAwayMessage(localeCallbackAway, screenName);
  238.   }
  239.  
  240.  
  241. }
  242.  
  243. localeCallbackDefault.OnRequestUserInfoDefaultError = function (screenname, errmsg) {
  244.   //if the user is offline we fall here.
  245.   offlinemsg =  aimString("gmi.infonotavailable").replace(/%ScreenName%/, screenName);
  246.   displayInfo(offlinemsg);
  247.   //dump("In OnRequestUserInfoDefaultError...Nothing for now...\n");
  248. }
  249.  
  250.  
  251. /*
  252.  * Function: OnRequestUserInfoAwayMessageComplete()
  253.  *
  254.  * Arguments: screenname, awaymsg
  255.  * 
  256.  * Return: None
  257.  *
  258.  * Description: This calls another fn displayProfileandAwayMsg to display the information.
  259.  *   processAwayMsg is another utility fn that converts %n, to SN etc.
  260.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  261.  *              
  262. */
  263.  
  264. localeCallbackAway.OnRequestUserInfoAwayMessageComplete = function (screenname, awaymsg) {
  265.   gotawaymsg = 1;
  266.   awaymsg = processAwayMsg(awaymsg);
  267.   awayMsg = awaymsg;
  268.   displayProfileandAwayMsg();
  269. }
  270.  
  271. localeCallbackAway.OnRequestUserInfoAwayMessageError = function (screenname, errmsg) {
  272.   dump("In OnRequestUserInfoAwayMessageError...Nothing for now...\n");
  273.   gotawaymsg = 2;
  274. }
  275.  
  276.  
  277. /*
  278.  * Function: OnRequestUserInfoSignatureComplete()
  279.  *
  280.  * Arguments: screenname, profilemsg
  281.  * 
  282.  * Return: None
  283.  *
  284.  * Description: This is called if the RequestUserInfoSignature is sucessful. displayProfileandAwayMsg fn
  285.  * is called to display the profile/signature msg.
  286.  *
  287.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  288.  *              
  289. */
  290.  
  291. localeCallbackProfile.OnRequestUserInfoSignatureComplete = function (screenname, profilemsg ) {
  292.   gotprofile = 1;
  293.   profileMsg = processAwayMsg(profilemsg);
  294.   displayProfileandAwayMsg();
  295. }
  296.  
  297.  
  298. localeCallbackProfile.OnRequestUserInfoSignatureError = function (screenname, errmsg ) {
  299.   dump("In OnRequestUserInfoSignatureError...Nothing for now...\n");
  300.   gotprofile = 2;
  301. }
  302.  
  303. /*
  304.  * Function: gmiNewIM()
  305.  *
  306.  * Arguments: None
  307.  * 
  308.  * Return: None
  309.  *
  310.  * Description: Creates a new IM conversation window.
  311.  *
  312.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  313.  *              
  314. */
  315.  
  316. function gmiNewIM() {
  317.   screenName = document.getElementById("screenname").value;
  318.   if ( AimOnlineAway() )
  319.         ComeBack();
  320.   var aimBuddy = aimBuddyManager();
  321.   if (!aimBuddy) {
  322.     dump("Unable to create aimBuddy...\n");
  323.     return;
  324.   }
  325.   //Check whether the buddy is online first.
  326.   if (!aimBuddy.IsBuddyOnline(screenName)) {
  327.     screenName = null;
  328.   }
  329.     
  330.     if (screenName != null)
  331.     {
  332.         var pIAimIM = aimIMObject();
  333.         
  334.         if (pIAimIM)
  335.             var pWindow = pIAimIM.GetExistingIM(screenName);
  336.         if (pWindow)
  337.         {
  338.             pWindow.focus();
  339.             return;
  340.         }
  341.     }
  342.   aimIMInvokeIMForm(screenName);
  343. }
  344.  
  345.  
  346. /*
  347.  * Function: gmiAddBuddy()
  348.  *
  349.  * Arguments: None
  350.  * 
  351.  * Return: None
  352.  *
  353.  * Description: Open up the Add Buddy window.
  354.  *
  355.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  356.  *              
  357. */
  358.  
  359. function gmiAddBuddy() {
  360.   screenName = document.getElementById("screenname").value;
  361.   openDialog("chrome://aim/content/BuddyAddBuddy.xul", "", 
  362.         "modal=yes,titlebar,chrome", null, null, screenName);
  363. }
  364.  
  365.  
  366. /*
  367.  * Function: displayProfileandAwayMsg()
  368.  *
  369.  * Arguments: None
  370.  * 
  371.  * Return: None
  372.  *
  373.  * Description: There are two async callbacks involved in GMI feature: localeCallbackAway and localeCallbackProfile.
  374.  *  If both the callbacks are complete then we display the info the user in displayInfo fn.
  375.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  376.  *              
  377. */
  378.  
  379. function displayProfileandAwayMsg() {
  380.   var newMsg;
  381.   // As we have two callbacks we check for both the callback before we display the info. 
  382.   if (gotprofile == 1 && isAway && gotawaymsg == 1) {
  383.     // Most of the users doesn't have profile/signature info. Just display the default in that case.
  384.     if (!profileMsg || profileMsg == "") {
  385.       profileMsg = aimString("gmi.noprofileavailable");
  386.       newMsg = awayMsg + "<hr>" + profileMsg;
  387.     }
  388.     else {
  389.       newMsg = awayMsg + "<hr>" + profileMsg;
  390.     }
  391.     displayInfo(newMsg);
  392.   }
  393.   else {
  394.     if (gotprofile == 1 && !isAway) {
  395.       if (!profileMsg || profileMsg == "") {
  396.         profileMsg = aimString("gmi.noprofileavailable");
  397.       }
  398.       newMsg = profileMsg;
  399.       displayInfo(newMsg);
  400.     }
  401.   }
  402.  
  403. }
  404.  
  405.  
  406. /*
  407.  * Function: displayInfo()
  408.  *
  409.  * Arguments: Msg.
  410.  * 
  411.  * Return: None
  412.  *
  413.  * Description: Just displays the Msg in the GMI window. Converts smilies, html info etc. Mostly inherited from Chat code.
  414.  *
  415.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  416.  *              
  417. */
  418.  
  419.  
  420. function displayInfo(newMsg) {
  421.  
  422.  
  423.   var moz = Components.classesByID["{77c0e42a-1dd2-11b2-8ebf-edc6606f2f4b}"];
  424.   var moztxt = moz.createInstance(Components.interfaces.mozITXTToHTMLConv);
  425.   var iface = Components.interfaces.mozITXTToHTMLConv;
  426.   var mozURL = iface.kURLs;
  427.   var smileyFeatureEnabled = aimPrefsManager().GetBoolPref("aim.general.im.smilies", null, false);
  428.        
  429.   if (smileyFeatureEnabled)
  430.     newMsg = convertToSmileyImg(newMsg);
  431.  
  432.   var theLogNode = top.frames['profilefield'];
  433.   var myRange = theLogNode.document.createRange();
  434.   var theLogBody =theLogNode.document.getElementsByTagName("body").item(0)
  435.   myRange.setStartAfter(theLogBody);
  436.   var docFrag;
  437.       
  438.   if(newMsg) {
  439.     newMsg = moztxt.scanHTML(newMsg, mozURL);
  440.   }
  441.  
  442.   docFrag = myRange.createContextualFragment("<html>"+  newMsg +"</html><br>");
  443.   var prevdocHeight = theLogNode.document.height;
  444.   var isLocked=((theLogNode.scrollY + theLogNode.innerHeight) >= theLogNode.document.height) 
  445.                     || (( theLogNode.document.height - theLogNode.scrollY ) <= 5)
  446.       theLogBody.appendChild(docFrag)
  447.               
  448.       
  449.   if (isLocked){
  450.     if ((theLogNode.innerHeight - (prevdocHeight-theLogNode.scrollY)) <= 5)
  451.       return;
  452.     if ((theLogNode.innerHeight < theLogNode.document.height) && (theLogNode.scrollY == prevdocHeight))
  453.       return;
  454.  
  455.     theLogNode.scrollTo(theLogNode.scrollX, theLogNode.document.height)
  456.   }
  457.  
  458.   //once we are done displaying the info disable the ok button. 
  459.   document.getElementById("ok").setAttribute("disabled", "true");
  460.  
  461. }
  462.  
  463. /*
  464.  * Function: convertToSmileyImg()
  465.  *
  466.  * Arguments: Msg.
  467.  * 
  468.  * Return: returns the msg converted to smilies.
  469.  *
  470.  * Description: convers a msg with smilies to actual smilies. Inherited from Chat code.
  471.  *
  472.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  473.  *              
  474. */
  475.  
  476. function convertToSmileyImg(msg){
  477.     var count;
  478.   if (msg) {
  479.       for (count = 0; count < smileyCodes.length; count++)        
  480.           msg = msg.replace(smileyCodes[count], smileyImgs[count] );
  481.   }
  482.     
  483.     return msg;
  484.  
  485. }